/*** Created Time: 2022年5月10日 21:00:42 ***/
/*** Author: Eric                        ***/

#ifndef _MY_TYPES_H_
#define _MY_TYPES_H_

#include <onix/onix.h>

#define     EOF     -1  // End Of File

#define     NULL    ((void *)0) // nullptr

#define     EOS     ('\0')    // 字符串结尾

#ifndef __cplusplus
// 兼容VSCode
#define     bool    _Bool
#define     true    (1)
#define     false   (0)

#endif

// 告诉编译器取消结构在编译过程中的优化对齐，按照实际占用字节数进行对齐，是GCC特有的语法
#define     _packed     __attribute__((packed))     

// 用于省略函数的栈帧
#define     _ofp        __attribute__((optimize("omit-frame-pointer")))

// __attribute__((always_inline)) : 强制内联
// 编译器只有在指定-O2的时候，才会将inline函数进行内联展开，如果不指定-O2的时候，还是会给inline函数生成单独的函数段
#define     _inline     __attribute__((always_inline)) inline

typedef     unsigned int        size_t;

typedef     char                int8;
typedef     short               int16;
typedef     int                 int32;
typedef     long long           int64;

typedef     unsigned char       u8;
typedef     unsigned short      u16;
typedef     unsigned int        u32;
typedef     unsigned long long  u64;

typedef     u32                 pid_t;

typedef     u32                 time_t;
typedef     u32                 idx_t;

typedef     int32               fd_t;   // 文件描述符
typedef enum std_fd_t
{
    stdin,
    stdout,
    stderr,
} std_fd_t;

#endif